<?php

declare(strict_types=1);

namespace app\admin\validate;

use think\Validate;
use think\facade\Db;

class LogisticsCompany extends Validate
{
    /**
     * 定义验证规则
     * 格式：'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    // 验证规则
    protected $rule = [
        'id'         => 'require|integer|gt:0',
        'name'      => 'require|max:50|string',
        'status'    => 'in:0,1',
        'create_time' => 'dateFormat:Y-m-d H:i:s',
        'creator'    => 'require|number',
        'update_time' => 'dateFormat:Y-m-d H:i:s',
        'updater'    => 'number',
        'is_del'     => 'in:0,时间已删除',
    ];



    // 验证场景
    protected $scene = [
        'create' => ['name'],
        'update' => ['cname', 'gender', 'birthday', 'phone', 'email', 'update_time', 'updater'],
        'search' => ['name' => 'string', 'status' => 'in:0,1', 'create_time', 'update_time'],
        'delete' => ['ids' => 'require|array|checkIds'],
        'show' => ['id'],
    ];


    protected function checkUnique($value, $field, $data)
    {
        $where = [
            $field   => $value,
            'is_del' => 0,
        ];

        if (isset($data['id'])) {
            $where[] = ['id', '<>', $data['id']];
        }

        return Db::name('customer_contact')->where($where)->find() ? false : true;
    }

    /**
     * 定义错误信息
     * 格式：'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    // 验证消息
    protected $message = [
        'cusid.require'     => '关联联系人不能为空',
        'cusid.number'      => '联系人ID必须是数字',
        'cname.require'     => '姓名不能为空',
        'cname.max'         => '姓名最多不能超过5个字符',
        'gender.require'    => '性别不能为空',
        'gender.in'         => '性别选择不正确',
        'birthday.date'     => '生日日期格式不正确',
        'birthday.dateFormat' => '生日日期格式不正确，正确格式为：YYYY-MM-DD',
        'phone.mobile' => '手机号码格式不正确',
        'phone.checkUnique' => '手机号码已存在',
        'email.email' => '电子邮件格式不正确',
        'email.checkUnique' => '电子邮件地址已存在',
        'qq.max'            => 'QQ号码最多不能超过50个字符',
        'wechat.max'        => '微信号最多不能超过50个字符',
        'whatsapp.max'      => 'WhatsApp号最多不能超过50个字符',
        'dingtalk.max'      => '钉钉号最多不能超过50个字符',
        'country.max'       => '国家编码最多不能超过9个字符',
        'address.max'       => '地址最多不能超过255个字符',
        'department.max'    => '部门名称最多不能超过100个字符',
        'position.max'      => '职位名称最多不能超过100个字符',
        'level.max'         => '级别最多不能超过9个字符',
        'decision.max'      => '决策关系最多不能超过9个字符',
        'tags.max'          => '标签总长度最多不能超过255个字符',
        'remark.max'        => '备注最多不能超过255个字符',
        'create_time.require' => '创建时间不能为空',
        'create_time.dateFormat' => '创建时间格式不正确，正确格式为：YYYY-MM-DD HH:ii:ss',
        'creator.require'   => '创建人不能为空',
        'creator.number'    => '创建人必须是数字',
        'update_time.dateFormat' => '更新时间格式不正确，正确格式为：YYYY-MM-DD HH:ii:ss',
        'updater.number'    => '更新人必须是数字',
        'is_del.in'         => '删除状态不正确',
    ];



    protected function checkIds($value, $rule, $data = [])
    {
        if (is_array($value)) {
            foreach ($value as $id) {
                if (!is_numeric($id) || $id <= 0) {
                    return '每个ID必须是正整数';
                }
            }
            return true;
        }
        return 'IDs必须是数组';
    }
}
